package com.silverbox.waimai.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.silverbox.waimai.entity.GoodsCart;
import com.silverbox.waimai.entity.extend.GoodsCartAndDetail;
import com.silverbox.waimai.entity.extend.GoodsCartExtend;

public interface GoodsCartMapper {
	int deleteByPrimaryKey(Integer id);

	int insert(GoodsCart record);

	int insertSelective(GoodsCart record);

	GoodsCart selectByPrimaryKey(Integer id);

	int updateByPrimaryKeySelective(GoodsCart record);

	int updateByPrimaryKey(GoodsCart record);

	/**
	 * 获取购物车以及购物车明细
	 * 
	 * @param goodsCart
	 * @return
	 */
	List<GoodsCartAndDetail> getGoodsCartAndDetail(GoodsCartExtend goodsCartExtend);

	/**
	 * 清空购物车
	 * 
	 * @param goodsCart
	 */
	int removeGoodsCart(GoodsCart goodsCart);

	/**
	 * 判断购物车是否存在同一商品相同属性
	 * 
	 * @param goodsCart
	 * @return
	 */
	List<GoodsCart> getSameGoodsProp(GoodsCartExtend goodsCartExtend);

	/**
	 * 获取购物车同一商品不同属性的种类数
	 * 
	 * @param goodsCartExtend
	 * @return
	 */
	Integer getSameGoodsDiffPropNum(GoodsCartExtend goodsCartExtend);

	/**
	 * 删除购物车（打包专用）
	 * 
	 * @param goodsCart
	 */
	Integer deleteGoodsCartForPack(GoodsCartExtend goodsCart);

	/**
	 * 更新购物车(打包专用)
	 * 
	 * @param GoodsCart
	 * @return
	 */
	Integer updateGoodsCartForPack(GoodsCartExtend goodsCart);

	/**
	 * 获取购物车内存在相同商品的数量(打包专用)
	 * 
	 * @param goodsCart
	 * @return
	 */
	Integer getSameGoodsCartPackCount(GoodsCartExtend goodsCart);

	/**
	 * 根据id获取购物车
	 * 
	 * @param id
	 * @return
	 */
	GoodsCartAndDetail getGoodsCartById(Integer id);
	
	/**
	 * 备注页修改属性提交时判断购物车有无相同属性的菜品
	 * @param goodsCart
	 * @return
	 */
	GoodsCart getGoodsCartByRemarkCommit(GoodsCartExtend goodsCart);
	
	/**
	 * 更新购物车桌台号
	 * @param goodsCartId
	 * @param tableName
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	int updateGoodsCartForTableNo(@Param("goodsCartId") List<Integer> goodsCartId, @Param("tableName") String tableName);

	/**
	 * 清空一定时间段购物车
	 * @param goodsCart
	 * @return
	 */
	int deleteGoodsCartByTableName(GoodsCartExtend goodsCart);

	/**
	 * 查询已删除的可修改必点菜
	 * @param storeId
	 * @param tableName
	 * @return
	 */
	List<GoodsCart> getDeletedNeedGoodsCart(GoodsCartExtend goodsCartExtend);

	/**
	 * 清除已删除的可修改必点菜
	 * @param goodsCartExtend
	 * @return
	 */
	int removeDeletedNeedGoodsCart(GoodsCartExtend goodsCartExtend);

	
	/**
	 * 清除可修改必选菜
	 * @param goodsCart
	 */
	void updateNeedGoods(GoodsCart goodsCart);

	/**
	 * 批量新增购物车商品
	 * @param goodsCartList
	 * @return
	 */
	int insertSelectiveBatch(@Param("goodsCartList") List<GoodsCartAndDetail> goodsCartList);

    void deleteGoodsCartDetails(@Param("buyerId") String buyerId,@Param("shopId") Integer shopId);

    void deleteGoodsCart(@Param("buyerId") String buyerId,@Param("systemBuyerId") String systemBuyerId,@Param("shopId") Integer shopId);

    void deleteGoodsCartDetailsByTableNo(GoodsCartExtend extend);

    void deleteGoodsCartByTableNo(GoodsCartExtend extend);
}